home *** CD-ROM | disk | FTP | other *** search
/ Precision Software Appli…tions Silver Collection 4 / Precision Software Applications Silver Collection Volume 4 (1993).iso / stats / chadyn.exe / YPICKMAP.C < prev    next >
Text File  |  1988-12-08  |  6KB  |  194 lines

  1.  
  2. /******************************  YPICKMAP.C  *********************************/
  3. /********************* (C) 1986,7,8 by JAMES A. YORKE ************************/
  4. #include "yinclud.h"
  5.  
  6. PickMap() {            /* Called by main(). Most of the work here is
  7.                    the selection of default parameters which
  8.                    are then reset where necessary by init_maps. 
  9.                 */
  10.     FILE * output;
  11.     extern int      null(), rungekutta (), iterate_map ();
  12.     int     keycheck();
  13.  
  14.     scr_clr();        /* in desmets pcio.a */
  15.     scr_rowcol(0, 0);
  16.     clearp();
  17.  
  18.     output = StOutPut;    /* this sends the list to the crt  */
  19.     defaults();        /* in this file */
  20.     modPointer = null;    /* for differential equations; see
  21.                    iterate_map() in YTools.c (where it is
  22.                    called) and and see YMapMenu.C where
  23.                    nontrivial modPointers are set */
  24.  
  25.  /* ************************ init_map() ***************************** */
  26.     init_map(output);    /* in YMAPMENU.C; this permits selection of a
  27.                    map or dif eq from a menu or the map or dif
  28.                    equ may specified, depending on which files
  29.                    are compiled together  and then it takes
  30.                    care care of initializing all the parameters
  31.                    */
  32.  /* ****************************************************************** */
  33.     if(num_lyap != -9999 && vec_dim > 0)
  34.         dim = lyapzero + num_lyap * vec_dim;
  35.                 /* needed for rungekutta */
  36.     else
  37.         dim = lyapzero;
  38.     if(steps_per_cycle != -9999. && steps_per_cycle != 0.) {
  39.         if(C4 != -9999 && C4 != 0)
  40.             step = (twopi / C4) / steps_per_cycle;
  41.         else
  42.             step = twopi / steps_per_cycle;
  43.     }
  44.  
  45.     sixth_step = step / 6.;    /* for rungekutta */
  46.     halfstep = step / 2;
  47.     ScreenConstants();
  48.  /* using X_upper, it sets b0 etc needed for MainMenu */
  49.     IterIteratee = map;    /* so iterate_map() and error_check() will call
  50.                    whatever map has been set equal to; this
  51.                    line and the following assignments of map
  52.                    pointers must be made after init_map() is
  53.                    called since that may set map */
  54.  
  55.     if(step == -9999.&& num_lyap <= 0 && its_per_plot == 1)
  56.         iteratee = map;    /* this speeds Henon by 8%; but if num_lyap or
  57.                    its_per_plot is changed, we must reset
  58.                    iteratee to be iterate_map;   */
  59.  
  60.  
  61.     if(rho_final == -9999.)
  62.         rho_final = rho;
  63.  /* for processl(): */
  64.     line_x1 = X_lower;
  65.     line_y1 = Y_upper;
  66.     line_x2 = X_upper;
  67.     line_y2 = Y_upper;
  68.  
  69.     GetDiskFileName();    /* basically sets DiskFileName[] =
  70.                    MapName[].PIC */
  71.     picNameFlag = NO;    /* this means DiskFileName has not been
  72.                    accessed */
  73.  
  74.     if(X_coord >= 0)
  75.         Xplot[0] = Xplot[1] = Xplot[2] = Xplot[3] = Xplot[4] = &y[X_coord];
  76.     if(X_coord == -1)
  77.         Xplot[0] = Xplot[1] = Xplot[2] = Xplot[3] = Xplot[4] = ρ
  78.     if(Y_coord >= 0)
  79.         Yplot[0] = Yplot[1] = Yplot[2] = Yplot[3] = Yplot[4] = &y[Y_coord];
  80.     if(Y_coord == -1)
  81.         Yplot[0] = Yplot[1] = Yplot[2] = Yplot[3] = Yplot[4] = ρ
  82.  
  83.     ssX_coord[0] = ssX_coord[1] = ssX_coord[2] = ssX_coord[3]
  84.         = ssX_coord[4] = X_coord;
  85.     ssY_coord[0] = ssY_coord[1] = ssY_coord[2] = ssY_coord[3]
  86.         = ssY_coord[4] = Y_coord;
  87. }
  88.  
  89. defaults() {            /* The values -9999 are defaults that tell the
  90.                    program these variables are not relevant for
  91.                    the map being studied.  For example, if step
  92.                    = -9999., the program knows it is dealing
  93.                    with a map, not a differential equation.   
  94.                 */
  95.     int     i,
  96.             ss;
  97.     extern int      null(), rungekutta (), iterate_map (), plot ();
  98.  
  99.     crossStatus = OFF;
  100.     for(ss = 1; ss < 5; ss++) {
  101.         X_low = x_new_low = x_old_low = X_Lo[ss] = -9999.;
  102.         Y_low = y_new_low = y_old_low = Y_Lo[ss] = -9999.;
  103.         X_upp = x_new_upp = x_old_upp = X_Up[ss] = -9999.;
  104.         Y_upp = y_new_upp = y_old_upp = Y_Up[ss] = -9999.;
  105.     }
  106.     modFlag = NO;
  107.     plotPointer = plot;
  108.     pIncrement = ρ    /* the variable incremented by + and - */
  109.     TDFreq = 0;
  110.     ScrnSec = 0;
  111.     for(ss = 0; ss < 5; ss++) {
  112.         xScrPix[ss] = -9999.;
  113.         diameters[ss] = 4.;
  114.     }
  115.     maskdef(mask);        /* subroutine defines mask[] */
  116.     core_row_bits = 8.* COREROWS;
  117.     twopi = 2 * pi;
  118.     defaultMessage = "\r";
  119.     for(i = 0; i < 10; i++)
  120.         message[i] = defaultMessage;/* all are pointers */
  121. #ifdef YYFILE
  122.     initFloor();        /* necessary for stack maps and differential
  123.                    equations */
  124. #endif
  125.     y_init_init();        /* initializes the initializer */
  126.     store(y, y + eqn0, eqn1);
  127.  
  128.     store(ya, y + eqn1 + eqn0, eqn1);
  129.     store(yb, y + eqn1 + eqn0, eqn1);
  130.     store(yc, y + eqn1 + eqn0, eqn1);
  131.     store(yd, y + eqn1 + eqn0, eqn1);
  132.     store(ye, y + eqn1 + eqn0, eqn1);
  133.  
  134.     beta = -9999.;
  135.     boxx = 0;
  136.     C1 = -9999.;        /* This default value is for detecting whether
  137.                    this variable is in use */
  138.     C2 = C3 = C4 = C5 = C6 = C7 = C8 = C9 = -9999.;
  139.     dot = 0;
  140.     dots = 100000000;
  141.     dim = 2;        /* basic case */
  142.     images = 0;
  143.     its_per_plot = 1;
  144.     lyaptime = 0;        /* setting=0 prevents access to obsolete lyap
  145.                    exponents */
  146.     lyapzero = 2;        /* y[lyapzero] is the zeroth coord of the
  147.                    zeroth lyapunov vector */
  148.     max_error = 0.;
  149.     num_lyap = -9999;    /* number of lyapunov numbers to be computed */
  150.     period = 1;        /* for the Newton method */
  151.     preiter = 0;
  152.     screen_fraction = 1./ 128.;
  153.     sigma = -9999.;
  154.     step = -9999.;        /* These values will be used to determine the
  155.                    process is a map-- not a dif. equ.-- if it
  156.                    is not changed. */
  157.     steps_per_cycle = -9999.;
  158.     rad_attr =.1;
  159.     ra2 = ra5 = -9999.;
  160.     rho = -9999.;
  161.     rho_final = -9999;
  162.     rho_step = 1.;
  163.     vec_dim = 2;        /* some default is needed for basin boundaries 
  164.                 */
  165.     X_coord = 0;
  166.     Y_coord = 1;
  167.     zeroth = 0;
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  /* DEFAULT POINTERS TO ROUTINES */
  175.     DEsolver = rungekutta;
  176.     init_process = null;    /*  This is called in q.c and is carried out
  177.                    before the process is iterated and after the
  178.                    menu is exited */
  179.     map = rungekutta;    /* if the process is not a differential
  180.                    equation, map is redefined in init_map() */
  181.  
  182.  
  183.  
  184.  
  185.     ChkTrajIteratee = iterate_map;
  186.  /* ChkTrajIteratee is called by checkTrajectory() -- which is called by
  187.     straddle() and the basinboundary routine */
  188.     iteratee = iterate_map;
  189.     StraddleIteratee = iterate_map;
  190. }
  191.  
  192.  
  193.  
  194.